package com.zhixue.media.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zhixue.base.model.RestResponse;
import com.zhixue.media.model.dto.QueryMediaParamsDto;
import com.zhixue.base.model.PageParams;
import com.zhixue.base.model.PageResult;
import com.zhixue.media.model.dto.UploadFileParamsDto;
import com.zhixue.media.model.dto.UploadFileResultDto;
import com.zhixue.media.model.po.MediaFiles;

/**
 * <p>
 * 媒资信息 服务类
 * </p>
 *
 * @author Dragon
 * @since 2023-09-25
 */
public interface MediaFilesService extends IService<MediaFiles> {

    /**
     * 媒资列表查询接口
     * @param companyId
     * @param pageParams
     * @param queryMediaParamsDto
     * @return
     */
    PageResult<MediaFiles> queryMediaFiels(Long companyId, PageParams pageParams, QueryMediaParamsDto queryMediaParamsDto);


    /**
     * 上传文件
     * @param companyId 机构id
     * @param uploadFileParamsDto 文件信息
     * @param localFilePath 文件本地路径
     * @param objectName  如果传入objectnmae，则要去按照objectname的目录去存储，如果不传则按年月日目录去存储
     * @return UploadFileResultDto
     */
    UploadFileResultDto uploadFile(Long companyId, UploadFileParamsDto uploadFileParamsDto, String localFilePath ,String objectName);


    /**
     * 上传文件到数据库
     * @param companyId
     * @param fileMd5
     * @param uploadFileParamsDto
     * @param bucket
     * @param objectName
     * @return
     */
    MediaFiles addMediaFilesToDb(Long companyId,String fileMd5,UploadFileParamsDto uploadFileParamsDto,String bucket,String objectName);


    /**
     * 检查文件是否存在
     *
     * @param fileMd5 文件的md5
     * @return
     */
    RestResponse<Boolean> checkFile(String fileMd5);


    /**
     * 检查分块是否存在
     *
     * @param fileMd5    文件的MD5
     * @param chunkIndex 分块序号
     * @return
     */
    RestResponse<Boolean> checkChunk(String fileMd5, int chunkIndex);


    /**
     * 上传分块
     *
     * @param fileMd5 文件MD5
     * @param chunkIndex   分块序号
     * @param localChunkFilePath   文件路径
     * @return
     */
    RestResponse uploadChunk(String fileMd5, int chunkIndex,  String localChunkFilePath);


    /**
     * 合并分块
     * @param companyId           机构id
     * @param fileMd5             文件MD5
     * @param chunkTotal          分块数量
     * @param uploadFileParamsDto 文件信息
     * @return
     */
    RestResponse mergeChunks(Long companyId, String fileMd5, int chunkTotal, UploadFileParamsDto uploadFileParamsDto) throws Exception;


    /**
     * 根据媒资id获取媒资信息
     * @param mediaId
     * @return
     */
    MediaFiles getFileById(String mediaId);


}
